#include "motor.h"
#include "pwm.h"

#define AIN1_PIN GPIO_Pin_4
#define AIN2_PIN GPIO_Pin_5
#define AIN1_PORT GPIOA
#define AIN2_PORT GPIOA

void Motor_Init(void) {
    GPIO_InitTypeDef GPIO_InitStructure;
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    
    GPIO_InitStructure.GPIO_Pin = AIN1_PIN | AIN2_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    PWM_Init(GPIO_Pin_2);
    Motor_Stop();
}

void Motor_SetDirection(uint8_t direction) {
    switch(direction) {
        case 1: // 正转
            GPIO_SetBits(AIN1_PORT, AIN1_PIN);
            GPIO_ResetBits(AIN2_PORT, AIN2_PIN);
            break;
        case 2: // 反转
            GPIO_ResetBits(AIN1_PORT, AIN1_PIN);
            GPIO_SetBits(AIN2_PORT, AIN2_PIN);
            break;
        default: // 停止
            GPIO_ResetBits(AIN1_PORT, AIN1_PIN);
            GPIO_ResetBits(AIN2_PORT, AIN2_PIN);
            break;
    }
}

void Motor_SetSpeed(uint16_t speed) {
    if(speed > 100) speed = 100;
    PWM_SetDuty(speed);
}

void Motor_Stop(void) {
    Motor_SetDirection(0);
    PWM_SetDuty(0);
}